home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / amos / artcoder.lha / ArtCoder / CollageCoder.AMOS / CollageCoder.amosSourceCode < prev    next >
AMOS Source Code  |  1996-01-12  |  32KB  |  918 lines

  1. ' Collage Coder -- Writes code to re-create your drawing anywhere on the 
  2. '                  screen.  Limited to Polygons and Polylines.   
  3. ' Copyright 1993, 1996 Steve Tiffany.  Freely distributable. 
  4. ' In order to use code from this, whatever program you paste it into must
  5. ' contain everything from PLINE: to R15: below.  
  6. ' Draw objects in upper left corner! 
  7. Dim OLDPAL$(32) : SCRNCHECK : If GOTTASETUP Then SCRNSETUP : SCRNCENTER
  8. 'XOFF=100 : YOFF=50 : Rem : Uncomment to draw object in new location..     
  9. 'Merge code (Ram:ArtCode.asc) here, using (in AMOS 1.3)  Shift - F5: 
  10. '                         or (in AMOS Pro)  Left Amiga - Shift - M 
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21. '*************************************************** 
  22. For J=0 To 31 : OLDPAL$(J)=Hex$(Colour(J)) : Next J
  23. Change Mouse 4 : MMODE=4
  24. Unpack 7 To 1 : Wind Save 
  25. If Ntsc=0
  26.    Screen Display 1,112,265,320,25
  27. End If 
  28. Screen 1 : Get Palette 0
  29. Ink 2 : Draw 121,1 To 138,10 : Draw 121,12 To 139,1 : 
  30. Draw 143,2 To 157,11 : Draw 143,11 To 157,2 : 
  31. Draw 137,13 To 124,22 : Draw 123,13 To 140,22 : 
  32. Draw 100,13 To 121,22 : Draw 100,22 To 121,13 : 
  33. Draw 100,11 To 121,2 : Draw 100,2 To 121,11 : 
  34. Draw 80,2 To 98,11 : Draw 80,11 To 98,2 : 
  35.  
  36. HIDFLAG=0 : OUTFLAG=0 : BX=159 : ARTMODE=0 : 
  37. 'CODEWIDTH=200 
  38. CODEWIDTH=60
  39. Screen 1 : Ink 0,,0 : If NUMCOLORS<32 Then Bar 159,12 To 319,24
  40. If NUMCOLORS<16 Then Bar 239,0 To 319,12
  41. If NUMCOLORS<8 Then Bar 199,0 To 239,12
  42. If NUMCOLORS<4 Then Bar 179,0 To 199,12
  43. Reserve Zone 6
  44. Screen 0 : Gr Writing 1 : GRMODE=1
  45. Proc CHECKPATTERN : HOLDCOLOR=CURRCOLOR
  46. If CURRCOLOR<16
  47.    ICONROWNUM=0 : ICONCOLNUM=CURRCOLOR
  48. Else 
  49.    ICONROWNUM=1 : ICONCOLNUM=CURRCOLOR-16
  50. End If 
  51. BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  52. Screen 1 : Ink 17 : Box BX,BY To BX+10,BY+12
  53.  
  54. Open Out 1,"ram:ArtCode.asc"
  55. Open Out 2,"ram:XYclip.asc"
  56. Wait Vbl 
  57. If Ntsc
  58.    Limit Mouse 112,215 To 431,239 : Rem : until they  an pick artmode
  59. Else 
  60.    Limit Mouse 112,265 To 431,289
  61. End If 
  62.  
  63. Do 
  64.    K$=Inkey$ : SCODE=Scancode
  65.    If SCODE=89 : Rem : user selected F10 to toggle tool bar...  
  66.       If HIDFLAG=0
  67.          Screen Hide 1 : HIDFLAG=1
  68.       Else If HIDFLAG=1
  69.          Screen Show 1 : HIDFLAG=0
  70.       End If 
  71.    End If 
  72.    If SCODE=64 Then CLICKHANDLER["POLYEND"]
  73.    If K$="D" Then CLICKHANDLER["PGON"]
  74.    If K$="d" Then CLICKHANDLER["PLINE"]
  75.    If K$="p" Then CLICKHANDLER["PAL"]
  76.    If K$="Q" Then CLICKHANDLER["QUIT"]
  77.    If K$="," Then CLICKHANDLER["COMMA"]
  78.    If Mouse Click=1 Then CLICKHANDLER[""]
  79. Loop 
  80.  
  81. PLINE:
  82.    Read X,Y : Add X,XOFF : Add Y,YOFF : Gr Locate X,Y
  83.    Do 
  84.       Read X : If X=-1 Then Exit 
  85.       Read Y : Add X,XOFF : Add Y,YOFF : Draw To X,Y
  86.    Loop : Return 
  87.  
  88. PGON:
  89.    Gosub PGON2 : P$="R"+Str$(P)-" " : Gosub P$ : Return 
  90. PGON2:
  91.    Read X01 : Read Y01 : X01=X01+XOFF : Y01=Y01+YOFF
  92.  
  93.    Read X02 : If X02=-1 Then P=1 : Return 
  94.    Read Y02 : Add X02,XOFF : Add Y02,YOFF
  95.  
  96.    Read X03 : If X03=-1 Then P=2 : Return 
  97.    Read Y03 : Add X03,XOFF : Add Y03,YOFF
  98.  
  99.    Read X04 : If X04=-1 Then P=3 : Return 
  100.    Read Y04 : Add X04,XOFF : Add Y04,YOFF
  101.  
  102.    Read X05 : If X05=-1 Then P=4 : Return 
  103.    Read Y05 : Add X05,XOFF : Add Y05,YOFF
  104.  
  105.    Read X06 : If X06=-1 Then P=5 : Return 
  106.    Read Y06 : Add X06,XOFF : Add Y06,YOFF
  107.  
  108.    Read X07 : If X07=-1 Then P=6 : Return 
  109.    Read Y07 : Add X07,XOFF : Add Y07,YOFF
  110.  
  111.    Read X08 : If X08=-1 Then P=7 : Return 
  112.    Read Y08 : Add X08,XOFF : Add Y08,YOFF
  113.  
  114.    Read X09 : If X09=-1 Then P=8 : Return 
  115.    Read Y09 : Add X09,XOFF : Add Y09,YOFF
  116.  
  117.    Read X10 : If X10=-1 Then P=9 : Return 
  118.    Read Y10 : Add X10,XOFF : Add Y10,YOFF
  119.  
  120.    Read X11 : If X11=-1 Then P=10 : Return 
  121.    Read Y11 : Add X11,XOFF : Add Y11,YOFF
  122.  
  123.    Read X12 : If X12=-1 Then P=11 : Return 
  124.    Read Y12 : Add X12,XOFF : Add Y12,YOFF
  125.  
  126.    Read X13 : If X13=-1 Then P=12 : Return 
  127.    Read Y13 : Add X13,XOFF : Add Y13,YOFF
  128.  
  129.    Read X14 : If X14=-1 Then P=13 : Return 
  130.    Read Y14 : Add X14,XOFF : Add Y14,YOFF
  131.  
  132.    Read X15 : If X15=-1 Then P=14 : Return 
  133.    Read Y15 : Add X15,XOFF : Add Y15,YOFF
  134.  
  135.    Read Y16 : P=15 : Return 
  136.  
  137. R1: Polygon X01,Y01 To X01,Y01 : Return 
  138. R2: Polygon X01,Y01 To X02,Y02 : Return 
  139. R3: Polygon X01,Y01 To X02,Y02 To X03,Y03 : Return 
  140. R4: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 : Return 
  141. R5: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 : Return 
  142. R6: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 : Return 
  143. R7: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 : Return 
  144. R8: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 : Return 
  145. R9: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 : Return 
  146. R10: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 : Return 
  147. R11: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 : Return 
  148. R12: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 : Return 
  149. R13: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 : Return 
  150. R14: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 To X14,Y14 : Return 
  151. R15: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 To X14,Y14 To X15,Y15 : Return 
  152.  
  153.  
  154. Procedure CLICKHANDLER[ROUTINE$]
  155.    Shared OUTFLAG,BX,BY,ARTMODE,CURRCOLOR,LCOUNT,NEWFLAG,HOLDXM,HOLDYM,CODEWIDTH
  156.    Shared NUMDOTS,WORD$,CURRRED,CURRGREEN,CURRBLUE,CHEXR$,CHEXG$,CHEXB$,OLDPAL$()
  157.    Shared XOFFSET,YOFFSET,XLIMIT,YLIMIT,NUMCOLORS,PATNUM,PCOLOR,GRMODE,CFLAG
  158.    Shared HOLDCOLOR,HIDFLAG,MMODE,SCRNHEIGHT,SCRNWIDTH
  159.    XM=X Mouse : YM=Y Mouse
  160.  
  161.    CURRSCREEN=Scin(XM,YM)
  162.    If ROUTINE$<>"" Then CURRSCREEN=1
  163.    Screen CURRSCREEN
  164.    XM=X Screen(XM) : YM=Y Screen(YM)
  165.  
  166. 'if it's a color or a new artmode on Screen 1... 
  167.    If CURRSCREEN=1
  168. '     first take care of all the X,Y's that have accumulated, if any...  
  169.       If Lof(2)>0
  170.          If ARTMODE=1
  171.             Gosub ARTMODE1
  172.          Else If ARTMODE=2
  173.             Gosub PLUSINK
  174.             Close 2 : Open In 2,"ram:XYclip.asc" : Print #1,"" : LCOUNT=0
  175.             Print #1,"Data "; : Add LCOUNT,5
  176.             Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  177.             Print #1,X;",";Y; : Gosub LLENNY
  178.             While Not Eof(2)
  179.                Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  180.                X$=X$-" " : Y$=Y$-" "
  181.                If LCOUNT>5
  182.                   Print #1,","; : Add LCOUNT,1
  183.                End If 
  184.                Print #1,X$;",";Y$; : Add LCOUNT,1
  185.                Gosub LLENNY
  186.                If LCOUNT>CODEWIDTH and Pof(2)<Lof(2)
  187.                   Print #1,"" : Print #1,"Data "; : LCOUNT=5
  188.                End If 
  189.             Wend 
  190.             NEWFLAG=1 : Print #1,",-1"
  191.             Print #1,"Gosub PLINE : "; : LCOUNT=14
  192.             Close 2 : Open Out 2,"ram:XYclip.asc"
  193.          End If 
  194.       End If 
  195.  
  196. ' they've used a keyboard equivalent...  
  197.    If ROUTINE$<>""
  198.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  199.       Gosub ROUTINE$ : Pop Proc
  200.    End If 
  201.  
  202. ' they're picking a color from the grid...   
  203.       If XM>158
  204.          Gosub CLEARCOLORGRID
  205.          ICONCOLNUM=((XM-160)/10)
  206.          If ICONCOLNUM>NUMCOLORS-1
  207.             ICONCOLNUM=NUMCOLORS-1
  208.          End If 
  209.  
  210.          ICONROWNUM=(YM)/13
  211.          If NUMCOLORS<32
  212.             ICONROWNUM=0
  213.          End If 
  214.  
  215.          CURRCOLOR=ICONCOLNUM+(ICONROWNUM*16)
  216.  
  217.          BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  218.          Ink 17 : Box BX,BY To BX+10,BY+12
  219.          Screen 0 : Ink CURRCOLOR : CFLAG=1
  220.  
  221.       Else 
  222. '     they're picking a new artmode... 
  223.          ICONCOLNUM=((XM)/40)+1
  224.          ICONROWNUM=(YM)/13
  225.          ICONID=ICONCOLNUM+(ICONROWNUM*4)
  226.          On ICONID Gosub PGON,PLINE,SEGPAINT,BBOXBAR,OUTLYN,PATTERN,TXTPAL,CIRCQUIT
  227.       End If 
  228.       If ARTMODE>0
  229.          Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  230.       End If 
  231.       Pop Proc
  232.    End If 
  233.  
  234. 'from here on it's an X,Y coordinate on Screen 0...  
  235.    If ARTMODE=1
  236.       If NEWFLAG=1
  237.          Print #2,XM : Print #2,YM
  238.          NEWFLAG=0 : HOLDXM=XM : HOLDYM=YM : NUMDOTS=1 : NUMDOT$=Str$(NUMDOTS)-" "
  239.          Ink 1,0 : Gr Writing 1 : Text 300,16,NUMDOT$ : Ink CURRCOLOR,PCOLOR
  240.       End If 
  241.       Screen 0
  242.       While Mouse Key=1
  243.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse) : Gr Writing 3
  244.          Draw HOLDXM,HOLDYM To XM2,YM2
  245.          Draw HOLDXM,HOLDYM To XM2,YM2
  246.       Wend 
  247.       Gr Writing 1 : Draw HOLDXM,HOLDYM To XM2,YM2
  248.       HOLDXM=XM2 : HOLDYM=YM2
  249.       Print #2,HOLDXM : Print #2,HOLDYM
  250.       Ink 1,0 : Inc NUMDOTS : NUMDOT$=Str$(NUMDOTS)-" " : Text 300,16,NUMDOT$
  251.       Ink CURRCOLOR,PCOLOR
  252.       If NUMDOTS=15
  253.          Gosub ARTMODE1
  254. '         Print #2,-1
  255.       End If 
  256.  
  257.    Else If ARTMODE=2
  258.       If NEWFLAG=1
  259.          Print #2,XM : Print #2,YM
  260.          NEWFLAG=0 : HOLDXM=XM : HOLDYM=YM
  261.       End If 
  262.       Screen 0
  263.       While Mouse Key=1
  264.          XM2=X Screen(X Mouse) : YM2=Y Screen(Y Mouse)
  265.          Gr Writing 3 : Draw HOLDXM,HOLDYM To XM2,YM2
  266.          Draw HOLDXM,HOLDYM To XM2,YM2
  267.       Wend 
  268.       Gr Writing 1 : Draw HOLDXM,HOLDYM To XM2,YM2
  269.       HOLDXM=XM2 : HOLDYM=YM2
  270.       Print #2,HOLDXM : Print #2,HOLDYM
  271.  
  272.    Else If ARTMODE=3
  273.    Else If ARTMODE=4 or ARTMODE=5
  274.       If HOLDXM<>XM2 and HOLDYM<>YM2
  275.          Print #2,HOLDXM : Print #2,HOLDYM : Print #2,XM2 : Print #2,YM2
  276.       End If 
  277.  
  278.    Else If ARTMODE=6 : Rem : paint
  279.    Else If ARTMODE=7 : Rem : Text 
  280.    Else If ARTMODE=8 : Rem : circle 
  281.    End If 
  282. Pop Proc
  283.  
  284. POLYEND:
  285.    If ARTMODE=1 Then Gosub PGON : Return 
  286.    If ARTMODE=2 Then Gosub PLINE
  287.    Return 
  288. PGON:
  289.    ARTMODE=1 : Gosub CLEARGRID : Box 0,0 To 39,12 : Ink CURRCOLOR
  290.    Change Mouse 4 : MMODE=4
  291.    NEWFLAG=1 : Screen 0 : Get Block 1,300,9,48,9 : Return 
  292. PLINE:
  293.    ARTMODE=2 : Gosub CLEARGRID : Box 39,0 To 79,12 : Ink CURRCOLOR
  294.    Change Mouse 4 : MMODE=4
  295.    NEWFLAG=1 : Return 
  296. SEGPAINT:
  297.  Return 
  298. BBOXBAR:
  299.  Return 
  300. OUTLYN:
  301.    If OUTFLAG=0
  302.       Change Mouse 4
  303.       Screen 0 : Set Paint 1
  304.       Screen 1 : Gosub CHECKWIDTH : Print #1,"Set Paint 1 : "; : Add LCOUNT,14
  305.       If Ntsc
  306.          Limit Mouse 271,215 To 431,239
  307.       Else 
  308.          Limit Mouse 271,265 To 431,289
  309.       End If 
  310.       While Mouse Click=0 : Wend 
  311.       XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  312.       If Ntsc
  313.          Limit Mouse 112,215 To 431,239
  314.       Else 
  315.          Limit Mouse 112,265 To 431,289
  316.       End If 
  317.       ICONCOLNUM=((XM-160)/10)
  318.       If ICONCOLNUM>NUMCOLORS-1
  319.          ICONCOLNUM=NUMCOLORS-1
  320.       End If 
  321.       ICONROWNUM=(YM)/13
  322.       If NUMCOLORS<32
  323.          ICONROWNUM=0
  324.       End If 
  325.       OLCOLOR=ICONCOLNUM+(ICONROWNUM*16) : Screen 0 : Ink ,,OLCOLOR
  326.       Gosub CHECKWIDTH : Print #1,"Ink ,,";OLCOLOR;" : "; : Add LCOUNT,11
  327.       Screen 1 : Ink 17 : Polyline 30,17 To 32,22 To 36,14 : OUTFLAG=1
  328.    Else 
  329.       Gosub CHECKWIDTH
  330.       Screen 0 : Set Paint 0 : Print #1,"Set Paint 0 : "; : Add LCOUNT,14
  331.       Screen 1 : Ink 0 : Bar 30,14 To 36,22 : OUTFLAG=0
  332.    End If 
  333.    If ARTMODE>0 and CURRCOLOR>-1
  334.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  335.    End If 
  336.    Change Mouse MMODE
  337.    Screen 0 : Ink CURRCOLOR
  338.    Return 
  339.  
  340. PATTERN:
  341.    OLDPCOLOR=PCOLOR : OLDPATNUM=PATNUM : Change Mouse 4
  342.    Wind Open 1,0,0,20,4 : Set Pattern 0
  343.    Ink 0,PCOLOR : Bar 0,0 To 158,24
  344.    Ink 2 : Box 107,0 To 158,24 : Draw 107,13 To 158,13
  345.    Ink 4,0 : Text 109,21,"Cancel" : Text 124,9,"OK" : Ink CURRCOLOR,PCOLOR
  346.    Set Slider 0,1,7,2,0,0,4,0
  347.    Set Pattern PATNUM : Bar 4,2 To 106,15
  348.    Hslider 4,16 To 106,23,102,PATNUM*3,4 : Set Zone 3,4,16 To 106,23
  349.    Set Zone 4,107,2 To 158,13 : Set Zone 5,107,14 To 158,24
  350.    Set Zone 6,159,0 To 319,24
  351.    Wait 5 : Rem so it doesn't re-set PATNUM value
  352.  
  353.    Repeat 
  354.       If Mouse Zone=3 and Mouse Key=1
  355.          Limit Mouse X Hard(4),Y Hard(16) To X Hard(105),Y Hard(23)
  356.          While Mouse Key=1
  357.             X=X Screen(X Mouse)-4
  358.             Set Slider 0,1,7,2,0,0,4,0
  359.             Hslider 4,16 To 106,23,102,X,4 : 
  360.             PATNUM=((X+4)/3)-1
  361.             Set Pattern PATNUM : Bar 4,2 To 106,15
  362.             PATNUM$=Str$(PATNUM)-" " : Text 46,12,PATNUM$
  363.          Wend 
  364.          Screen 0 : Set Pattern PATNUM : Screen 1
  365.  
  366.       Else If Mouse Zone=6 and Mouse Key=1
  367.          XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  368.          Ink 0 : Box BX,BY To BX+10,BY+12
  369.          ICONCOLNUM=((XM-160)/10)
  370.          ICONROWNUM=(YM)/13
  371.          PCOLOR=ICONCOLNUM+(ICONROWNUM*16)
  372.          BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  373.          Ink 17 : Box BX,BY To BX+10,BY+12
  374.          Screen 0 : Ink CURRCOLOR,PCOLOR : Screen 1 : Ink CURRCOLOR,PCOLOR
  375.             Set Pattern PATNUM : Bar 4,2 To 106,15
  376.             PATNUM$=Str$(PATNUM)-" " : Text 46,12,PATNUM$
  377.       End If 
  378.       If Ntsc
  379.          Limit Mouse 112,215 To 431,239 : Rem : Screen 1 only... 
  380.       Else 
  381.          Limit Mouse 112,265 To 431,289
  382.       End If 
  383.    Until Mouse Key=1 and Mouse Zone>3 and Mouse Zone<6
  384.  
  385.    If Mouse Zone=4 and Mouse Key=1
  386.       If PATNUM<>OLDPATNUM
  387.          Gosub CHECKWIDTH : Print #1,"Set Pattern ";PATNUM;" : ";
  388.          Add LCOUNT,17 : Gosub CHECKWIDTH
  389.       End If 
  390.       If PCOLOR<>OLDPCOLOR
  391.          Print #1,"Ink ,";PCOLOR;" : "; : Add LCOUNT,10 : Gosub CHECKWIDTH
  392.       End If 
  393.    Else If Mouse Zone=5 and Mouse Key=1
  394.       PCOLOR=OLDPCOLOR : PATNUM=OLDPATNUM : Set Pattern PATNUM
  395.    End If 
  396.    Wind Close 
  397.    Screen 0 : Set Pattern PATNUM : Ink CURRCOLOR,PCOLOR
  398.    Screen 1 : Set Pattern 0
  399.    If PATNUM=0
  400.       Ink 0,1 : Bar 70,14 To 76,22
  401.    Else 
  402.       Ink 17 : Polyline 70,17 To 72,22 To 76,14
  403.    End If 
  404.    Ink CURRCOLOR
  405.    If ARTMODE>0
  406.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  407.    End If 
  408.    Change Mouse MMODE
  409. Return 
  410.  
  411. TXTPAL:
  412.    If XM>99
  413.       Return 
  414.    End If 
  415.  
  416. 'else it's the palette requester... stay here 'til they hit OK or Cancel...  
  417. PAL:
  418.    Change Mouse 4
  419.    If HIDFLAG=1
  420.       Screen Show 1
  421.    End If 
  422.    Wind Open 1,0,0,20,4
  423.    Ink 0 : Bar 0,0 To 158,24
  424.    Ink 2 : Box 107,0 To 158,24 : Draw 107,13 To 158,13
  425.    Ink 4,0 : Text 109,21,"Cancel" : Text 124,9,"OK"
  426.    OLDCURRCOLOR=CURRCOLOR
  427. NEWCOLOR:
  428.    Proc RGBER
  429.    Ink 4,0 : Text 1,7,CHEXR$ : Text 1,15,CHEXG$ : Text 1,23,CHEXB$
  430.  
  431.    Set Slider 0,1,7,2,0,0,4,0
  432.    Hslider 10,2 To 106,8,96,CURRRED*6,6 : Set Zone 1,10,2 To 106,8
  433.    Hslider 10,9 To 106,15,96,CURRGREEN*6,6 : Set Zone 2,10,9 To 106,15
  434.    Hslider 10,16 To 106,23,96,CURRBLUE*6,6 : Set Zone 3,10,16 To 106,23
  435.    Set Zone 4,107,2 To 158,13 : Set Zone 5,107,14 To 158,24
  436.    Set Zone 6,159,0 To 319,24
  437.    Wait 5 : Rem so it doesn't re-set currblue value
  438.  
  439.    Repeat 
  440.       If Mouse Zone=1 and Mouse Key=1
  441.          Limit Mouse X Hard(10),Y Hard(2) To X Hard(105),Y Hard(8)
  442.          While Mouse Key=1
  443.             X=X Screen(X Mouse)-10
  444.             Set Slider 0,1,7,2,0,0,4,0
  445.             Hslider 10,2 To 106,8,96,X,6 : 
  446.             CURRRED=((X+6)/6)-1
  447.             CHEXR$=Hex$(CURRRED) : CHEXR$=Right$(CHEXR$,1) : Text 1,7,CHEXR$
  448.             CHEX$="$"+CHEXR$+CHEXG$+CHEXB$ : 
  449.             Screen 0 : Colour CURRCOLOR,Val(CHEX$)
  450.             Screen 1 : Colour CURRCOLOR,Val(CHEX$)
  451.          Wend 
  452.       Else If Mouse Zone=2 and Mouse Key=1
  453.          Limit Mouse X Hard(10),Y Hard(9) To X Hard(105),Y Hard(15)
  454.          While Mouse Key=1
  455.             X=X Screen(X Mouse)-10
  456.             Set Slider 0,1,7,2,0,0,4,0
  457.             Hslider 10,9 To 106,15,96,X,6 : 
  458.             CURRGREEN=((X+6)/6)-1
  459.             CHEXG$=Hex$(CURRGREEN) : CHEXG$=Right$(CHEXG$,1) : Text 1,15,CHEXG$
  460.             CHEX$="$"+CHEXR$+CHEXG$+CHEXB$ : Colour CURRCOLOR,Val(CHEX$)
  461.             Screen 0 : Colour CURRCOLOR,Val(CHEX$)
  462.             Screen 1 : Colour CURRCOLOR,Val(CHEX$)
  463.          Wend 
  464.       Else If Mouse Zone=3 and Mouse Key=1
  465.          Limit Mouse X Hard(10),Y Hard(16) To X Hard(105),Y Hard(23)
  466.          While Mouse Key=1
  467.             X=X Screen(X Mouse)-10
  468.             Set Slider 0,1,7,2,0,0,4,0
  469.             Hslider 10,16 To 106,23,96,X,6 : 
  470.             CURRBLUE=((X+6)/6)-1
  471.             CHEXB$=Hex$(CURRBLUE) : CHEXB$=Right$(CHEXB$,1) : Text 1,23,CHEXB$
  472.             CHEX$="$"+CHEXR$+CHEXG$+CHEXB$ : Colour CURRCOLOR,Val(CHEX$)
  473.             Screen 0 : Colour CURRCOLOR,Val(CHEX$)
  474.             Screen 1 : Colour CURRCOLOR,Val(CHEX$)
  475.          Wend 
  476.       Else If Mouse Zone=6 and Mouse Key=1
  477.          XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  478.          Ink 0 : Box BX,BY To BX+10,BY+12
  479.          ICONCOLNUM=((XM-160)/10)
  480.          ICONROWNUM=(YM)/13
  481.          CURRCOLOR=ICONCOLNUM+(ICONROWNUM*16)
  482.          BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  483.          Ink 17 : Box BX,BY To BX+10,BY+12
  484.          Goto NEWCOLOR
  485.       End If 
  486.       If Ntsc
  487.          Limit Mouse 112,215 To 431,239 : Rem : Screen 1 only... 
  488.       Else 
  489.          Limit Mouse 112,265 To 431,289
  490.       End If 
  491.    Until Mouse Key=1 and Mouse Zone>3 and Mouse Zone<6
  492.    Change Mouse MMODE
  493.    If Mouse Zone=4 and Mouse Key=1
  494.       If LCOUNT>50
  495.          Print #1,""
  496.       End If 
  497.       Print #1,"Palette ";Hex$(Colour(0));
  498.       For J=1 To NUMCOLORS-1
  499.          Print #1,",";Hex$(Colour(J));
  500.       Next J : Print #1,"" : LCOUNT=0
  501.       For J=0 To 31
  502.          OLDPAL$(J)=Hex$(Colour(J))
  503.       Next J
  504.    Else If Mouse Zone=5 and Mouse Key=1
  505.       For J=0 To 31
  506.          Screen 0 : Colour J,Val(OLDPAL$(J))
  507.          Screen 1 : Colour J,Val(OLDPAL$(J))
  508.       Next J
  509.       CURRCOLOR=OLDCURRCOLOR
  510.       Gosub CLEARCOLORGRID
  511.       If CURRCOLOR<16
  512.          ICONROWNUM=0 : ICONCOLNUM=CURRCOLOR
  513.       Else 
  514.          ICONROWNUM=1 : ICONCOLNUM=CURRCOLOR-16
  515.       End If 
  516.       BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  517.       Ink 17 : Box BX,BY To BX+10,BY+12
  518.    End If 
  519.    Wind Close 
  520.    If HIDFLAG=1
  521.       Screen Hide 1
  522.    End If 
  523.    If ARTMODE>0
  524.       Limit Mouse XOFFSET,YOFFSET To XLIMIT,YLIMIT
  525.    End If 
  526.    Return 
  527.  
  528. CIRCQUIT:
  529.    If XM<140
  530.       Return 
  531.    End If 
  532. QUIT:
  533.    If GRMODE=0 Then Print #1,"Gr Writing 1 : "
  534.    Limit Mouse : Close 1 : Close 2 : Kill "ram:XYclip.asc"
  535.    Change Mouse 1 : Edit 
  536.  
  537. COMMA:
  538.    Change Mouse 5
  539.    While Mouse Click=0 : Wend : Screen 0
  540.    XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  541.    CURRCOLOR=Point(XM,YM) : Screen 1 : Gosub CLEARCOLORGRID
  542.    If CURRCOLOR<16
  543.       ICONROWNUM=0 : ICONCOLNUM=CURRCOLOR
  544.    Else 
  545.       ICONROWNUM=1 : ICONCOLNUM=CURRCOLOR-16
  546.    End If 
  547.    BX=(ICONCOLNUM*10)+159 : BY=(ICONROWNUM*12)
  548.    Box BX,BY To BX+10,BY+12 : Screen 0 : Ink CURRCOLOR
  549.    CFLAG=1 : Change Mouse MMODE : Return 
  550. CLEARGRID:
  551.    Ink 2 : Box 0,0 To 39,24 : Box 79,0 To 119,24 : Box 139,0 To 158,24
  552.    For Y=0 To 24 Step 12 : Draw 0,Y To 158,Y : Next Y : Draw 99,0 To 99,24
  553.    Ink 17 : Return 
  554. CLEARCOLORGRID:
  555.    Ink 0 : Box 159,0 To 319,24 : Draw 159,12 To 319,12
  556.    For Y=169 To 309 Step 10 : Draw Y,0 To Y,24 : Next Y
  557.    Ink 17 : Return 
  558. LLENNY:
  559.    LLENX=3 : LLENY=3
  560.    If X<100
  561.       LLENX=2
  562.       If X<10
  563.          LLENX=1
  564.       End If 
  565.    End If 
  566.    If Y<100
  567.       LLENY=2
  568.       If Y<10
  569.          LLENY=1
  570.       End If 
  571.    End If 
  572.    LLEN=LLENX+LLENY : Add LCOUNT,LLEN
  573.    Return 
  574.  
  575. E1: X01=X : Y01=Y : Return 
  576. E2: X02=X : Y02=Y : Return 
  577. E3: X03=X : Y03=Y : Return 
  578. E4: X04=X : Y04=Y : Return 
  579. E5: X05=X : Y05=Y : Return 
  580. E6: X06=X : Y06=Y : Return 
  581. E7: X07=X : Y07=Y : Return 
  582. E8: X08=X : Y08=Y : Return 
  583. E9: X09=X : Y09=Y : Return 
  584. E10: X10=X : Y10=Y : Return 
  585. E11: X11=X : Y11=Y : Return 
  586. E12: X12=X : Y12=Y : Return 
  587. E13: X13=X : Y13=Y : Return 
  588. E14: X14=X : Y14=Y : Return 
  589. E15: X15=X : Y15=Y : Return 
  590.  
  591. P1: Polygon X01,Y01 To X01,Y01 : Return 
  592. P2: Polygon X01,Y01 To X02,Y02 : Return 
  593. P3: Polygon X01,Y01 To X02,Y02 To X03,Y03 : Return 
  594. P4: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 : Return 
  595. P5: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 : Return 
  596. P6: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 : Return 
  597. P7: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 : Return 
  598. P8: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 : Return 
  599. P9: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 : Return 
  600. P10: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 : Return 
  601. P11: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 : Return 
  602. P12: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 : Return 
  603. P13: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 : Return 
  604. P14: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 To X14,Y14 : Return 
  605. P15: Polygon X01,Y01 To X02,Y02 To X03,Y03 To X04,Y04 To X05,Y05 To X06,Y06 To X07,Y07 To X08,Y08 To X09,Y09 To X10,Y10 To X11,Y11 To X12,Y12 To X13,Y13 To X14,Y14 To X15,Y15 : Return 
  606. Return 
  607. ARTMODE1:
  608.    Gosub PLUSINK : Close 2 : Open In 2,"ram:XYclip.asc"
  609.    Screen 0 : Put Block 1 : Screen 1
  610.    Gosub CHECKWIDTH
  611.    If GRMODE<>1
  612.       Print #1,"Gr Writing 1 : "; : GRMODE=1 : Add LCOUNT,15 : Gosub CHECKWIDTH
  613.    End If 
  614.    Print #1,"" : LCOUNT=0
  615.    Print #1,"Data "; : LCOUNT=5
  616.    Input #2,X$ : Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  617.    Print #1,X;",";Y; : Gosub LLENNY : NUMELEMENTS=1 : Gosub E1
  618.    While Not Eof(2)
  619.       Input #2,X$
  620.       If X$=" -1" Then Exit 
  621.       Input #2,Y$ : X=Val(X$) : Y=Val(Y$)
  622.       X$=X$-" " : Y$=Y$-" "
  623.       Print #1,",";X$;",";Y$; : Add LCOUNT,1 : Gosub LLENNY
  624.       Inc NUMELEMENTS
  625.       On NUMELEMENTS Gosub E1,E2,E3,E4,E5,E6,E7,E8,E9,E10,E11,E12,E13,E14,E15
  626.    Wend 
  627.    Screen 0 : On NUMELEMENTS Gosub P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15
  628.    Screen 1 : NEWFLAG=1 : Print #1,",-1"
  629.    Print #1,"Gosub PGON : "; : Add LCOUNT,13
  630.  
  631.    Close 2 : Open Out 2,"ram:XYclip.asc"
  632.    Return 
  633. PLUSINK:
  634.    If CFLAG=0 or CURRCOLOR=HOLDCOLOR Then Return 
  635.    Gosub CHECKWIDTH : Print #1,"Ink ";CURRCOLOR;" : "; : Add LCOUNT,10
  636.    Gosub CHECKWIDTH : CFLAG=0 : HOLDCOLOR=CURRCOLOR : Return 
  637. CHECKWIDTH:
  638.    If LCOUNT>CODEWIDTH Then Print #1,"" : LCOUNT=0
  639.    Return 
  640. End Proc
  641.  
  642. Procedure SCRNCHECK
  643.    Shared GOTTASETUP,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,SCRNTYPE$
  644.    Shared XOFFSET,YOFFSET,XLIMIT,YLIMIT
  645.    Dir$="Ram:" : FILE$="Ram:ArtCoderSettings"
  646.    If Exist(FILE$)
  647.       If Key Shift>0
  648.          GOTTASETUP=-1 : Pop Proc
  649.       Else 
  650.          Open In 1,FILE$
  651.          Input #1,SCRNWIDTH$,SCRNHEIGHT$,NUMCOLORS$,SCRNTYPE$,XOFFSET$,YOFFSET$,XLIMIT$,YLIMIT$
  652.          Close 1
  653.          SCRNWIDTH=Val(SCRNWIDTH$) : SCRNHEIGHT=Val(SCRNHEIGHT$)
  654.          NUMCOLORS=Val(NUMCOLORS$) : XOFFSET=Val(XOFFSET$) : YOFFSET=Val(YOFFSET$)
  655.          XLIMIT=Val(XLIMIT$) : YLIMIT=Val(YLIMIT$)
  656.          If SCRNTYPE$="Lowres"
  657.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres
  658.          Else If SCRNTYPE$="Hires"
  659.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires
  660.          Else If SCRNTYPE$="Lowres+Laced"
  661.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres+Laced
  662.          Else 
  663.             Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires+Laced
  664.          End If 
  665.          Curs Off : Flash Off 
  666.          Screen Display 0,XOFFSET,YOFFSET,SCRNWIDTH,SCRNHEIGHT
  667.          Ink ,0
  668.          If NUMCOLORS=2
  669.             Cls 1
  670.          End If 
  671.       End If 
  672.    Else 
  673.       GOTTASETUP=-1
  674.    End If 
  675.    End Proc
  676.  
  677. Procedure SCRNSETUP
  678.    Shared SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,SCRNTYPE$
  679.    Shared XOFFSET,YOFFSET,XLIMIT,YLIMIT
  680.    Screen Open 0,320,200,16,Lowres
  681.    Wait Vbl 
  682.    Limit Mouse : Ink 2
  683.    If Ntsc
  684.       Text 172,9,"320x200   352x240" : Text 172,21,"640x200   704x240"
  685.       Text 172,33,"320x400   352x480" : Text 172,45,"640x400   704x480"
  686.    Else 
  687.       Text 172,9,"320x256   352x290" : Text 172,21,"640x256   704x290"
  688.       Text 172,33,"320x512   352x566" : Text 172,45,"640x512   704x566"
  689.    End If 
  690.    Text 54,9,"Screen Size?" : Text 172,75,"2   4   8  16  32"
  691.    Draw 191,66 To 191,78 : Draw 223,66 To 223,78 : Draw 253,66 To 253,78
  692.    Draw 284,66 To 284,78 : Text 15,75,"Number of Colors?"
  693.    Box 159,36 To 319,48 : Draw 241,0 To 241,48 : Box 159,0 To 319,12
  694.    Box 159,12 To 319,24 : Box 159,24 To 319,36 : Box 159,66 To 319,78
  695.  
  696.    Repeat 
  697.       If Mouse Click=1 Then Gosub CLICKHANDLER
  698.    Until SCRNWIDTH>0 and NUMCOLORS>0
  699.  
  700.    If NUMCOLORS=2
  701.       Cls 1
  702.    End If 
  703.    Pop Proc
  704.  
  705. CLICKHANDLER:
  706.    XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse)
  707.    If XM<159 Then Return 
  708.    If YM>78 Then Return 
  709.    If YM>48 and YM<66 Then Return 
  710.    If YM<49
  711.       If XM<242
  712.          If YM<12
  713.             If Ntsc
  714.                SCRNWIDTH=320 : SCRNHEIGHT=200
  715.             Else 
  716.                SCRNWIDTH=320 : SCRNHEIGHT=256
  717.             End If 
  718.             SCRNTYPE$="Lowres"
  719.             Gosub CLEARGRID : Box 159,0 To 241,12 : Return 
  720.          Else If YM<24
  721.             If Ntsc
  722.                SCRNWIDTH=640 : SCRNHEIGHT=200
  723.             Else 
  724.                SCRNWIDTH=640 : SCRNHEIGHT=256
  725.             End If 
  726.             SCRNTYPE$="Hires"
  727.             Gosub CLEARGRID : Box 159,12 To 241,24 : 
  728.             If NUMCOLORS=32
  729.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  730.             End If 
  731.             Return 
  732.          Else If YM<34
  733.             If Ntsc
  734.                SCRNWIDTH=320 : SCRNHEIGHT=400
  735.             Else 
  736.                SCRNWIDTH=320 : SCRNHEIGHT=512
  737.             End If 
  738.             SCRNTYPE$="Lowres+Laced"
  739.             Gosub CLEARGRID : Box 159,24 To 241,36 : Return 
  740.          End If 
  741.             If Ntsc
  742.                SCRNWIDTH=640 : SCRNHEIGHT=400
  743.             Else 
  744.                SCRNWIDTH=640 : SCRNHEIGHT=512
  745.             End If 
  746.             SCRNTYPE$="Hires+Laced"
  747.             Gosub CLEARGRID : Box 159,36 To 241,48
  748.             If NUMCOLORS=32
  749.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  750.             End If 
  751.             Return 
  752.       Else 
  753.          If YM<12
  754.             If Ntsc
  755.                SCRNWIDTH=352 : SCRNHEIGHT=240
  756.             Else 
  757.                SCRNWIDTH=352 : SCRNHEIGHT=290
  758.             End If 
  759.             SCRNTYPE$="Lowres"
  760.             Gosub CLEARGRID : Box 241,0 To 319,12 : Return 
  761.          Else If YM<24
  762.             If Ntsc
  763.                SCRNWIDTH=704 : SCRNHEIGHT=240
  764.             Else 
  765.                SCRNWIDTH=704 : SCRNHEIGHT=290
  766.             End If 
  767.             SCRNTYPE$="Hires"
  768.             Gosub CLEARGRID : Box 241,12 To 319,24
  769.             If NUMCOLORS=32
  770.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  771.             End If 
  772.             Return 
  773.          Else If YM<34
  774.             If Ntsc
  775.                SCRNWIDTH=352 : SCRNHEIGHT=480
  776.             Else 
  777.                SCRNWIDTH=352 : SCRNHEIGHT=566
  778.             End If 
  779.             SCRNTYPE$="Lowres+Laced"
  780.             Gosub CLEARGRID : Box 241,24 To 319,36 : Return 
  781.          End If 
  782.             If Ntsc
  783.                SCRNWIDTH=704 : SCRNHEIGHT=480
  784.             Else 
  785.                SCRNWIDTH=704 : SCRNHEIGHT=566
  786.             End If 
  787.             SCRNTYPE$="Hires+Laced"
  788.             Gosub CLEARGRID : Box 241,36 To 319,48
  789.             If NUMCOLORS=32
  790.                NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78
  791.             End If 
  792.             Return 
  793.       End If 
  794.    Else If YM>65
  795.       If XM<191
  796.          NUMCOLORS=2 : Gosub CLEARCOLORGRID : Box 159,66 To 191,78 : Return 
  797.       Else If XM<223
  798.          NUMCOLORS=4 : Gosub CLEARCOLORGRID : Box 191,66 To 223,78 : Return 
  799.       Else If XM<253
  800.          NUMCOLORS=8 : Gosub CLEARCOLORGRID : Box 223,66 To 253,78 : Return 
  801.       Else If XM<284
  802.          NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78 : Return 
  803.       End If 
  804.          If SCRNWIDTH>400
  805.             NUMCOLORS=16 : Gosub CLEARCOLORGRID : Box 253,66 To 284,78 : Return 
  806.          Else 
  807.             NUMCOLORS=32 : Gosub CLEARCOLORGRID : Box 284,66 To 319,78 : Return 
  808.          End If 
  809.    End If 
  810.    Return 
  811. CLEARGRID:
  812.    Ink 2 : Box 159,0 To 319,12 : Box 159,12 To 319,24 : Box 159,24 To 319,36
  813.    Box 159,36 To 319,48 : Draw 241,0 To 241,48 : Ink 4
  814.    Return 
  815. CLEARCOLORGRID:
  816.    Ink 2 : Box 159,66 To 319,78 : Draw 191,66 To 191,78 : Draw 223,66 To 223,78
  817.    Draw 253,66 To 253,78 : Draw 284,66 To 284,78 : Ink 4
  818.    Return 
  819. End Proc
  820.  
  821. Procedure SCRNCENTER
  822.    Shared SCRNWIDTH,SCRNHEIGHT,SCRNTYPE$,NUMCOLORS,XOFFSET,YOFFSET,XLIMIT,YLIMIT
  823.    If SCRNTYPE$="Lowres"
  824.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres
  825.    Else If SCRNTYPE$="Hires"
  826.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires
  827.    Else If SCRNTYPE$="Lowres+Laced"
  828.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Lowres+Laced
  829.    Else 
  830.       Screen Open 0,SCRNWIDTH,SCRNHEIGHT,NUMCOLORS,Hires+Laced
  831.    End If 
  832.  
  833.    Cls 1 : Curs Off : Flash Off : Box 0,0 To SCRNWIDTH-1,SCRNHEIGHT-1
  834.    Box 0,2 To SCRNWIDTH-1,SCRNHEIGHT-3 : Box 0,4 To SCRNWIDTH-1,SCRNHEIGHT-5
  835.    Locate ,10 : Centre "Center screen then click mouse."
  836.    X Mouse=190 : Y Mouse=30 : Wait 10
  837.    While Mouse Click<>1 : 
  838.       XOFFSET=X Mouse-88 : YOFFSET=Y Mouse-38
  839.       Gosub CUTXOFFSET
  840.       Screen Display 0,XOFFSET,YOFFSET,SCRNWIDTH,SCRNHEIGHT
  841.    Wend 
  842.    XLIMIT=X Hard(SCRNWIDTH-1) : YLIMIT=Y Hard(SCRNHEIGHT-1)
  843.    Open Out 1,"Ram:ArtCoderSettings"
  844.       Print #1,SCRNWIDTH : Print #1,SCRNHEIGHT : Print #1,NUMCOLORS
  845.       Print #1,SCRNTYPE$ : Print #1,XOFFSET : Print #1,YOFFSET
  846.       Print #1,XLIMIT : Print #1,YLIMIT
  847.    Close 1 : Cls 1 : Pop Proc
  848.  
  849. CUTXOFFSET:
  850.    If XOFFSET<96 Then XOFFSET=80 : Return 
  851.    If XOFFSET<112 Then XOFFSET=96 : Return 
  852.    If XOFFSET<128 Then XOFFSET=112 : Return 
  853.    If XOFFSET<144 Then XOFFSET=128
  854.    Return 
  855. End Proc
  856.  
  857. Procedure CHECKPATTERN
  858.    Shared PATNUM,CURRCOLOR,PCOLOR,OUTFLAG
  859.    Screen 0 : Get Block 1,0,0,32,18
  860.    Draw 0,0 To 1,1 : CURRCOLOR=Point(1,1) : Bar 0,0 To 17,17
  861.    OLCOLOR=Point(0,0)
  862.    PIX$=""
  863.    Restore CHECKPOINTS
  864.    For J=1 To 12
  865.       Read X,Y : PIXCHECK=Point(X,Y)
  866.       If PIXCHECK<>CURRCOLOR Then PCOLOR=PIXCHECK
  867.    Next J
  868.    Ink 0,1,2 : Bar 0,0 To 17,17 : 
  869.    TESTOLCOLOR=Point(0,0) : If TESTOLCOLOR=2 Then OUTFLAG=1
  870.    Restore CHECKPOINTS
  871.    For J=1 To 12
  872.       Read X,Y : PIXCHECK=Point(X,Y) : PIX$=PIX$+Str$(PIXCHECK)-" "
  873.    Next J
  874.    Restore PATTERNS
  875.    Gosub CHECKPAT
  876.    Ink CURRCOLOR,PCOLOR,OLCOLOR : Screen 1 : Ink 17
  877.    If OUTFLAG=1 Then Polyline 30,17 To 32,22 To 36,14
  878.    If PATNUM>0 Then Polyline 70,17 To 72,22 To 76,14
  879.    Screen 0 : Put Block 1
  880.    Pop Proc
  881.  
  882. CHECKPAT: Rem: finds value of PATNUM...  
  883.    PATNUM=-1
  884.    While PATTERN$<>PIX$
  885.       Inc PATNUM : Read PATTERN$
  886.    Wend 
  887.    Return 
  888.  
  889. PATTERNS:
  890. Data "000000000000","111111111111","101010101110","110111111101","101111101111"
  891. Data "110111110001","100111100001","011111111111","010000000000","011011111101"
  892. Data "111111101110","100111000001","100001111100","000111111101","101111000010"
  893. Data "000000111100","000000011100","010111111101","111101100011","111111001111"
  894. Data "111111110011","111111000011","010111111111","000011111111","010111111110"
  895. Data "111111101111","111111110111","111111000011","101110111111","101010111111"
  896. Data "101010111110","101010101110","101000101110","100000001100","100000000000"
  897.  
  898. CHECKPOINTS:
  899. Data 5,2,3,3,4,3,5,3,6,3,7,3,8,3,16,2,1,8,1,16,4,11,4,12
  900. End Proc
  901.  
  902. Procedure RGBER
  903.    Shared CURRCOLOR,CURRRED,CURRGREEN,CURRBLUE,CHEXR$,CHEXG$,CHEXB$,GRMODE
  904.    CHEX$=Hex$(Colour(CURRCOLOR),3)
  905.    CHEXR$=Mid$(CHEX$,2,1) : CHEXG$=Mid$(CHEX$,3,1) : CHEXB$=Right$(CHEX$,1)
  906.    CURRCHEX$=CHEXR$ : Gosub CHECKER : CURRRED=CHEX
  907.    CURRCHEX$=CHEXG$ : Gosub CHECKER : CURRGREEN=CHEX
  908.    CURRCHEX$=CHEXB$ : Gosub CHECKER : CURRBLUE=CHEX
  909.    Pop Proc
  910. CHECKER:
  911.    If CURRCHEX$="A" Then CHEX=10 : Return 
  912.    If CURRCHEX$="B" Then CHEX=11 : Return 
  913.    If CURRCHEX$="C" Then CHEX=12 : Return 
  914.    If CURRCHEX$="D" Then CHEX=13 : Return 
  915.    If CURRCHEX$="E" Then CHEX=14 : Return 
  916.    If CURRCHEX$="F" Then CHEX=15 : Return 
  917.    CHEX=Val(CURRCHEX$) : Return 
  918. End Proc